199. 二叉树的右视图

199. 二叉树的右视图

Similar Question

leading to the advanced question

Solution Tips

方案一: DFS

依赖 depth 处理每次层, 取最后一个节点即可

var rightSideView = function (root) {
    const ans = [];
    function dfs(node, depth) {
        if (!node) {
            return;
        }
        if (ans.length === depth) {
            ans.push(node.val);
        }
        dfs(node.right, depth + 1);
        dfs(node.left, depth + 1);
    }
    dfs(root, 0);
    return ans;
};

方案二: BFS

// bfs - 层序遍历
var rightSideView = function (root) {
    const ans = [];
    const queue = [];
    if (root) {
        queue.push(root);
    }
    while (queue.length) {
        const len = queue.length;
        // 一层层的处理,每一层的最后一个节点就是从右边看到的节点
        ans.push(queue[len - 1].val);
        // 按顺序获取下一层的所有节点
        for (let i = 0; i < len; i++) {
            const cur = queue.shift();
            if (cur.left) {
                queue.push(cur.left);
            }
            if (cur.right) {
                queue.push(cur.right);
            }
        }
    }
    return ans;
};

// dfs - 根右左遍历,并记录深度,来判断是否是该深度第一次访问的节点
var rightSideView = function (root) {
    const ans = [];
    function dfs(node, depth) {
        if (!node) {
            return;
        }
        if (ans.length === depth) {
            ans.push(node.val);
        }
        dfs(node.right, depth + 1);
        dfs(node.left, depth + 1);
    }
    dfs(root, 0);
    return ans;
};